package com.itc.job.controller;

import java.util.List;
import javax.servlet.http.HttpServletResponse;

import com.itc.job.domain.SysJob;
import com.itc.job.service.ISysJobService;
import com.itc.job.util.CronUtils;
import com.itc.job.util.ScheduleUtils;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.itc.common.core.constant.Constants;
import com.itc.common.core.exception.job.TaskException;
import com.itc.common.core.utils.StringUtils;
import com.itc.common.core.utils.poi.ExcelUtil;
import com.itc.common.log.annotation.Log;
import com.itc.common.log.enums.BusinessType;
import com.itc.common.security.annotation.RequiresPermissions;
import com.itc.common.security.utils.SecurityUtils;

/**
 * 调度任务信息操作处理
 * 
 * @author zhangyh
 */
@RestController
@RequestMapping("/job")
public class SysJobController
{
    @Autowired
    private ISysJobService jobService;

//    /**
//     * 查询定时任务列表
//     */
//    @RequiresPermissions("monitor:job:list")
//    @GetMapping("/list")
//    public TableDataInfo list(SysJob sysJob)
//    {
//        startPage();
//        List<SysJob> list = jobService.selectJobList(sysJob);
//        return getDataTable(list);
//    }
//
//    /**
//     * 导出定时任务列表
//     */
//    @RequiresPermissions("monitor:job:export")
//    @Log(title = "定时任务", businessType = BusinessType.EXPORT)
//    @PostMapping("/export")
//    public void export(HttpServletResponse response, SysJob sysJob)
//    {
//        List<SysJob> list = jobService.selectJobList(sysJob);
//        ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
//        util.exportExcel(response, list, "定时任务");
//    }
//
//    /**
//     * 获取定时任务详细信息
//     */
//    @RequiresPermissions("monitor:job:query")
//    @GetMapping(value = "/{jobId}")
//    public R getInfo(@PathVariable("jobId") Long jobId)
//    {
//        return success(jobService.selectJobById(jobId));
//    }
//
//    /**
//     * 新增定时任务
//     */
//    @RequiresPermissions("monitor:job:add")
//    @Log(title = "定时任务", businessType = BusinessType.INSERT)
//    @PostMapping
//    public R add(@RequestBody SysJob job) throws SchedulerException, TaskException
//    {
//        if (!CronUtils.isValid(job.getCronExpression()))
//        {
//            return error("新增任务'" + job.getJobName() + "'失败，Cron表达式不正确");
//        }
//        else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
//        {
//            return error("新增任务'" + job.getJobName() + "'失败，目标字符串不允许'rmi'调用");
//        }
//        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS }))
//        {
//            return error("新增任务'" + job.getJobName() + "'失败，目标字符串不允许'ldap(s)'调用");
//        }
//        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
//        {
//            return error("新增任务'" + job.getJobName() + "'失败，目标字符串不允许'http(s)'调用");
//        }
//        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR))
//        {
//            return error("新增任务'" + job.getJobName() + "'失败，目标字符串存在违规");
//        }
//        else if (!ScheduleUtils.whiteList(job.getInvokeTarget()))
//        {
//            return error("新增任务'" + job.getJobName() + "'失败，目标字符串不在白名单内");
//        }
//        job.setCreateBy(SecurityUtils.getUsername());
//        return toAjax(jobService.insertJob(job));
//    }
//
//    /**
//     * 修改定时任务
//     */
//    @RequiresPermissions("monitor:job:edit")
//    @Log(title = "定时任务", businessType = BusinessType.UPDATE)
//    @PutMapping
//    public R edit(@RequestBody SysJob job) throws SchedulerException, TaskException
//    {
//        if (!CronUtils.isValid(job.getCronExpression()))
//        {
//            return error("修改任务'" + job.getJobName() + "'失败，Cron表达式不正确");
//        }
//        else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
//        {
//            return error("修改任务'" + job.getJobName() + "'失败，目标字符串不允许'rmi'调用");
//        }
//        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS }))
//        {
//            return error("修改任务'" + job.getJobName() + "'失败，目标字符串不允许'ldap(s)'调用");
//        }
//        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
//        {
//            return error("修改任务'" + job.getJobName() + "'失败，目标字符串不允许'http(s)'调用");
//        }
//        else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR))
//        {
//            return error("修改任务'" + job.getJobName() + "'失败，目标字符串存在违规");
//        }
//        else if (!ScheduleUtils.whiteList(job.getInvokeTarget()))
//        {
//            return error("修改任务'" + job.getJobName() + "'失败，目标字符串不在白名单内");
//        }
//        job.setUpdateBy(SecurityUtils.getUsername());
//        return toAjax(jobService.updateJob(job));
//    }
//
//    /**
//     * 定时任务状态修改
//     */
//    @RequiresPermissions("monitor:job:changeStatus")
//    @Log(title = "定时任务", businessType = BusinessType.UPDATE)
//    @PutMapping("/changeStatus")
//    public R changeStatus(@RequestBody SysJob job) throws SchedulerException
//    {
//        SysJob newJob = jobService.selectJobById(job.getJobId());
//        newJob.setStatus(job.getStatus());
//        return toAjax(jobService.changeStatus(newJob));
//    }
//
//    /**
//     * 定时任务立即执行一次
//     */
//    @RequiresPermissions("monitor:job:changeStatus")
//    @Log(title = "定时任务", businessType = BusinessType.UPDATE)
//    @PutMapping("/run")
//    public R run(@RequestBody SysJob job) throws SchedulerException
//    {
//        boolean result = jobService.run(job);
//        return result ? success() : error("任务不存在或已过期！");
//    }
//
//    /**
//     * 删除定时任务
//     */
//    @RequiresPermissions("monitor:job:remove")
//    @Log(title = "定时任务", businessType = BusinessType.DELETE)
//    @DeleteMapping("/{jobIds}")
//    public R remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException
//    {
//        jobService.deleteJobByIds(jobIds);
//        return success();
//    }
}
